package com.demo.java.OD451_500.OD459;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【Wonderland(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146344292
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取票价数组
        String[] costsStr = scanner.nextLine().split(" ");
        int[] costs = new int[costsStr.length];
        for (int i = 0; i < costsStr.length; i++) {
            costs[i] = Integer.parseInt(costsStr[i]);
        }

        // 读取游玩日期数组
        String[] daysStr = scanner.nextLine().split(" ");
        int[] days = new int[daysStr.length];
        for (int i = 0; i < daysStr.length; i++) {
            days[i] = Integer.parseInt(daysStr[i]);
        }

        int max = days[days.length - 1];  // 最后一游玩日期
        int[] dp = new int[max + 1];  // dp 数组，用于存储每个日期之前的最小费用
        int index = 0;

        // 遍历每一天
        for (int i = 1; i <= max; i++) {
            if (i == days[index]) {  // 如果当天是游玩日期
                dp[i] = Math.min(dp[i - 1] + costs[0],  // 选择1天票
                        Math.min(i >= 3 ? dp[i - 3] + costs[1] : Integer.MAX_VALUE,  // 选择3天票
                                Math.min(i >= 7 ? dp[i - 7] + costs[2] : Integer.MAX_VALUE,  // 选择7天票
                                        i >= 30 ? dp[i - 30] + costs[3] : Integer.MAX_VALUE)));  // 选择30天票
                index++;
            } else {
                dp[i] = dp[i - 1];  // 如果当天不是游玩日期，继承前一天的费用
            }
        }

        System.out.println(dp[max]);  // 输出最后的最小费用
    }
}